package com.at.activemq.topic;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.junit.Test;

import javax.jms.*;

// 持久化topic 的消息消费者
public class JmsConsummer_persistence {
    public static final String ACTIVEMQ_URL = "tcp://192.168.91.133:61616";
//    public static final String TOPIC_NAME = "Topic-Persistence";
    public static final String TOPIC_NAME = "Topic-jdbc-Persistence";

    public static void main(String[] args) throws Exception {
        System.out.println("****   marry    *****");

        // 1 按照给定的url创建连接工程，这个构造器采用默认的用户名密码
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
        // 2 通过连接工厂连接 connection
        javax.jms.Connection connection = activeMQConnectionFactory.createConnection();
        connection.setClientID("marry");

        // 3 创建回话  session
        // 两个参数，第一个事务， 第二个签收
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 4 创建目的地 （两种 ： 队列/主题   这里用主题）
        Topic topic = session.createTopic(TOPIC_NAME);
        TopicSubscriber topicSubscriber = session.createDurableSubscriber(topic, "remark...");

        // 5 发布订阅
        connection.start();

        Message message = topicSubscriber.receive();// 一直等
        while (null != message) {
            TextMessage textMessage = (TextMessage) message;
            System.out.println(" 收到的持久化 topic ：" + textMessage.getText());
            message = topicSubscriber.receive(3000L);
        }

        session.close();
        connection.close();
    }

    @Test
    public void testJmsConsumer_persistence() throws JMSException {
        System.out.println("****   JDBC持久化消费者端   *****");
        // 1 按照给定的url创建连接工程，这个构造器采用默认的用户名密码
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
        // 2 通过连接工厂连接 connection
        javax.jms.Connection connection = activeMQConnectionFactory.createConnection();
        connection.setClientID("LJL");
        // 3 创建回话  session
        // 两个参数，第一个事务， 第二个签收
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 4 创建目的地 （两种 ： 队列/主题   这里用主题）
        Topic topic = session.createTopic(TOPIC_NAME);
        TopicSubscriber topicSubscriber = session.createDurableSubscriber(topic, "mq_jdbc");
        // 5 发布订阅
        connection.start();
        Message message = topicSubscriber.receive();// 一直等
        while (null != message) {
            TextMessage textMessage = (TextMessage) message;
            System.out.println(" 收到的持久化 topic ：" + textMessage.getText());
            message = topicSubscriber.receive(3000L);
        }
        session.close();
        connection.close();
    }
}